home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / dflt14.zip / MSGBOX.C < prev    next >
Text File  |  1992-06-27  |  6KB  |  208 lines

  1. /* ------------------ msgbox.c ------------------ */
  2.  
  3. #include "dflat.h"
  4.  
  5. extern DBOX MsgBox;
  6. extern DBOX InputBoxDB;
  7. WINDOW CancelWnd;
  8.  
  9. static int ReturnValue;
  10.  
  11. int MessageBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  12. {
  13.     switch (msg)    {
  14.         case CREATE_WINDOW:
  15.             GetClass(wnd) = MESSAGEBOX;
  16.             InitWindowColors(wnd);
  17.             ClearAttribute(wnd, CONTROLBOX);
  18.             break;
  19.         case KEYBOARD:
  20.             if (p1 == '\r' || p1 == ESC)
  21.                 ReturnValue = (int)p1;
  22.             break;
  23.         default:
  24.             break;
  25.     }
  26.     return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2);
  27. }
  28.  
  29. int YesNoBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  30. {
  31.     switch (msg)    {
  32.         case CREATE_WINDOW:
  33.             GetClass(wnd) = MESSAGEBOX;
  34.             InitWindowColors(wnd);
  35.             ClearAttribute(wnd, CONTROLBOX);
  36.             break;
  37.         case KEYBOARD:    {
  38.             int c = tolower((int)p1);
  39.             if (c == 'y')
  40.                 SendMessage(wnd, COMMAND, ID_OK, 0);
  41.             else if (c == 'n')
  42.                 SendMessage(wnd, COMMAND, ID_CANCEL, 0);
  43.             break;
  44.         }
  45.         default:
  46.             break;
  47.     }
  48.     return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2);
  49. }
  50.  
  51. int ErrorBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  52. {
  53.     switch (msg)    {
  54.         case CREATE_WINDOW:
  55.             GetClass(wnd) = ERRORBOX;
  56.             InitWindowColors(wnd);
  57.             break;
  58.         case KEYBOARD:
  59.             if (p1 == '\r' || p1 == ESC)
  60.                 ReturnValue = (int)p1;
  61.             break;
  62.         default:
  63.             break;
  64.     }
  65.     return BaseWndProc(ERRORBOX, wnd, msg, p1, p2);
  66. }
  67.  
  68. int CancelBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  69. {
  70.     switch (msg)    {
  71.         case CREATE_WINDOW:
  72.             CancelWnd = wnd;
  73.             SendMessage(wnd, CAPTURE_MOUSE, 0, 0);
  74.             SendMessage(wnd, CAPTURE_KEYBOARD, 0, 0);
  75.             break;
  76.         case COMMAND:
  77.             if ((int) p1 == ID_CANCEL && (int) p2 == 0)
  78.                 SendMessage(GetParent(wnd), msg, p1, p2);
  79.             return TRUE;
  80.         case CLOSE_WINDOW:
  81.             CancelWnd = NULL;
  82.             SendMessage(wnd, RELEASE_MOUSE, 0, 0);
  83.             SendMessage(wnd, RELEASE_KEYBOARD, 0, 0);
  84.             p1 = TRUE;
  85.             break;
  86.         default:
  87.             break;
  88.     }
  89.     return BaseWndProc(MESSAGEBOX, wnd, msg, p1, p2);
  90. }
  91.  
  92. void CloseCancelBox(void)
  93. {
  94.     if (CancelWnd != NULL)
  95.         SendMessage(CancelWnd, CLOSE_WINDOW, 0, 0);
  96. }
  97.  
  98. static char *InputText;
  99. static int TextLength;
  100.  
  101. int InputBoxProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  102. {
  103.     int rtn;
  104.     switch (msg)    {
  105.         case CREATE_WINDOW:
  106.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  107.             SendMessage(ControlWindow(&InputBoxDB,ID_INPUTTEXT),
  108.                         SETTEXTLENGTH, TextLength, 0);
  109.             return rtn;
  110.         case COMMAND:
  111.             if ((int) p1 == ID_OK && (int) p2 == 0)
  112.                 GetItemText(wnd, ID_INPUTTEXT,
  113.                             InputText, TextLength);
  114.             break;
  115.         default:
  116.             break;
  117.     }
  118.     return DefaultWndProc(wnd, msg, p1, p2);
  119. }
  120.  
  121. BOOL InputBox(WINDOW wnd,char *ttl,char *msg,char *text,int len)
  122. {
  123.     InputText = text;
  124.     TextLength = len;
  125.     InputBoxDB.dwnd.title = ttl;
  126.     InputBoxDB.dwnd.w = 4 + 
  127.         max(20, max(len, max(strlen(ttl), strlen(msg))));
  128.     InputBoxDB.ctl[1].dwnd.x = (InputBoxDB.dwnd.w-2-len)/2;
  129.     InputBoxDB.ctl[0].dwnd.w = strlen(msg);
  130.     InputBoxDB.ctl[0].itext = msg;
  131.     InputBoxDB.ctl[1].dwnd.w = len;
  132.     InputBoxDB.ctl[2].dwnd.x = (InputBoxDB.dwnd.w - 20) / 2;
  133.     InputBoxDB.ctl[3].dwnd.x = InputBoxDB.ctl[2].dwnd.x + 10;
  134.     InputBoxDB.ctl[2].isetting = ON;
  135.     InputBoxDB.ctl[3].isetting = ON;
  136.     return DialogBox(wnd, &InputBoxDB, TRUE, InputBoxProc);
  137. }
  138.  
  139. BOOL GenericMessage(WINDOW wnd,char *ttl,char *msg,int buttonct,
  140.       int (*wndproc)(struct window *,enum messages,PARAM,PARAM),
  141.       char *b1, char *b2, int c1, int c2, int isModal)
  142. {
  143.     BOOL rtn;
  144.     MsgBox.dwnd.title = ttl;
  145.     MsgBox.ctl[0].dwnd.h = MsgHeight(msg);
  146.     MsgBox.ctl[0].dwnd.w = max(max(MsgWidth(msg),
  147.             buttonct*8 + buttonct + 2), strlen(ttl)+2);
  148.     MsgBox.dwnd.h = MsgBox.ctl[0].dwnd.h+6;
  149.     MsgBox.dwnd.w = MsgBox.ctl[0].dwnd.w+4;
  150.     if (buttonct == 1)
  151.         MsgBox.ctl[1].dwnd.x = (MsgBox.dwnd.w - 10) / 2;
  152.     else    {
  153.         MsgBox.ctl[1].dwnd.x = (MsgBox.dwnd.w - 20) / 2;
  154.         MsgBox.ctl[2].dwnd.x = MsgBox.ctl[1].dwnd.x + 10;
  155.         MsgBox.ctl[2].class = BUTTON;
  156.     }
  157.     MsgBox.ctl[1].dwnd.y = MsgBox.dwnd.h - 4;
  158.     MsgBox.ctl[2].dwnd.y = MsgBox.dwnd.h - 4;
  159.     MsgBox.ctl[0].itext = msg;
  160.     MsgBox.ctl[1].itext = b1;
  161.     MsgBox.ctl[2].itext = b2;
  162.     MsgBox.ctl[1].command = c1;
  163.     MsgBox.ctl[2].command = c2;
  164.     MsgBox.ctl[1].isetting = ON;
  165.     MsgBox.ctl[2].isetting = ON;
  166.     rtn = DialogBox(wnd, &MsgBox, isModal, wndproc);
  167.     MsgBox.ctl[2].class = 0;
  168.     return rtn;
  169. }
  170.  
  171. WINDOW MomentaryMessage(char *msg)
  172. {
  173.     WINDOW wnd = CreateWindow(
  174.                     TEXTBOX,
  175.                     NULL,
  176.                     -1,-1,MsgHeight(msg)+2,MsgWidth(msg)+2,
  177.                     NULL,NULL,NULL,
  178.                     HASBORDER | SHADOW | SAVESELF);
  179.     SendMessage(wnd, SETTEXT, (PARAM) msg, 0);
  180.     if (cfg.mono == 0)    {
  181.         WindowClientColor(wnd, WHITE, GREEN);
  182.         WindowFrameColor(wnd, WHITE, GREEN);
  183.     }
  184.     SendMessage(wnd, SHOW_WINDOW, 0, 0);
  185.     return wnd;
  186. }
  187.  
  188. int MsgHeight(char *msg)
  189. {
  190.     int h = 1;
  191.     while ((msg = strchr(msg, '\n')) != NULL)    {
  192.         h++;
  193.         msg++;
  194.     }
  195.     return min(h, SCREENHEIGHT-10);
  196. }
  197.  
  198. int MsgWidth(char *msg)
  199. {
  200.     int w = 0;
  201.     char *cp = msg;
  202.     while ((cp = strchr(msg, '\n')) != NULL)    {
  203.         w = max(w, (int) (cp-msg));
  204.         msg = cp+1;
  205.     }
  206.     return min(max(strlen(msg),w), SCREENWIDTH-10);
  207. }
  208.